Don't use hardcoded DEMOCODEDIR on Windows.
authorTor Lillqvist <tml@iki.fi>
Thu, 25 Sep 2003 18:48:06 +0000 (18:48 +0000)
committerTor Lillqvist <tml@src.gnome.org>
Thu, 25 Sep 2003 18:48:06 +0000 (18:48 +0000)
2003-09-25  Tor Lillqvist  <tml@iki.fi>

* demos/gtk-demo/main.c: Don't use hardcoded DEMOCODEDIR on Windows.

2003-09-21  Tor Lillqvist  <tml@iki.fi>

* gdk/win32/gdkevents-win32.c (handle_wm_paint): New
function. Code split out from gdk_event_translate(). Needed
because gdk_event_get_graphics_expose() couldn't do anything
sensible otherwise. (Not that I think graphics exposes work anyway
in gdk/win32, but at least now the code could work.)

(gdk_event_get_graphics_expose): Call handle_wm_paint() instead of
gdk_event_translate(), which couldn't have worked as it doesn't
take any pre-allocated GdkEvent parameter any longer.

(gdk_event_translate): Handle WM_MOUSEACTIVATE: Don't let
GDK_WINDOW_TEMP windows be activated. (#122578, John Ehresman)

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
demos/gtk-demo/main.c
gdk/win32/gdkevents-win32.c

index ec7e5d089c1c47226ca723136ac81e60bc73e6cf..e6acdd0240dd93b496fd4824f2c25ecc281c9aa0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+2003-09-25  Tor Lillqvist  <tml@iki.fi>
+
+       * demos/gtk-demo/main.c: Don't use hardcoded DEMOCODEDIR on Windows.
+
+2003-09-21  Tor Lillqvist  <tml@iki.fi>
+
+       * gdk/win32/gdkevents-win32.c (handle_wm_paint): New
+       function. Code split out from gdk_event_translate(). Needed
+       because gdk_event_get_graphics_expose() couldn't do anything
+       sensible otherwise. (Not that I think graphics exposes work anyway
+       in gdk/win32, but at least now the code could work.)
+
+       (gdk_event_get_graphics_expose): Call handle_wm_paint() instead of
+       gdk_event_translate(), which couldn't have worked as it doesn't
+       take any pre-allocated GdkEvent parameter any longer.
+       
+       (gdk_event_translate): Handle WM_MOUSEACTIVATE: Don't let
+       GDK_WINDOW_TEMP windows be activated. (#122578, John Ehresman)
+
 2003-09-24  Matthias Clasen  <maclas@gmx.de>
 
        * demos/gtk-demo/appwindow.c (do_appwindow): Demonstrate tooltips
index ec7e5d089c1c47226ca723136ac81e60bc73e6cf..e6acdd0240dd93b496fd4824f2c25ecc281c9aa0 100644 (file)
@@ -1,3 +1,22 @@
+2003-09-25  Tor Lillqvist  <tml@iki.fi>
+
+       * demos/gtk-demo/main.c: Don't use hardcoded DEMOCODEDIR on Windows.
+
+2003-09-21  Tor Lillqvist  <tml@iki.fi>
+
+       * gdk/win32/gdkevents-win32.c (handle_wm_paint): New
+       function. Code split out from gdk_event_translate(). Needed
+       because gdk_event_get_graphics_expose() couldn't do anything
+       sensible otherwise. (Not that I think graphics exposes work anyway
+       in gdk/win32, but at least now the code could work.)
+
+       (gdk_event_get_graphics_expose): Call handle_wm_paint() instead of
+       gdk_event_translate(), which couldn't have worked as it doesn't
+       take any pre-allocated GdkEvent parameter any longer.
+       
+       (gdk_event_translate): Handle WM_MOUSEACTIVATE: Don't let
+       GDK_WINDOW_TEMP windows be activated. (#122578, John Ehresman)
+
 2003-09-24  Matthias Clasen  <maclas@gmx.de>
 
        * demos/gtk-demo/appwindow.c (do_appwindow): Demonstrate tooltips
index ec7e5d089c1c47226ca723136ac81e60bc73e6cf..e6acdd0240dd93b496fd4824f2c25ecc281c9aa0 100644 (file)
@@ -1,3 +1,22 @@
+2003-09-25  Tor Lillqvist  <tml@iki.fi>
+
+       * demos/gtk-demo/main.c: Don't use hardcoded DEMOCODEDIR on Windows.
+
+2003-09-21  Tor Lillqvist  <tml@iki.fi>
+
+       * gdk/win32/gdkevents-win32.c (handle_wm_paint): New
+       function. Code split out from gdk_event_translate(). Needed
+       because gdk_event_get_graphics_expose() couldn't do anything
+       sensible otherwise. (Not that I think graphics exposes work anyway
+       in gdk/win32, but at least now the code could work.)
+
+       (gdk_event_get_graphics_expose): Call handle_wm_paint() instead of
+       gdk_event_translate(), which couldn't have worked as it doesn't
+       take any pre-allocated GdkEvent parameter any longer.
+       
+       (gdk_event_translate): Handle WM_MOUSEACTIVATE: Don't let
+       GDK_WINDOW_TEMP windows be activated. (#122578, John Ehresman)
+
 2003-09-24  Matthias Clasen  <maclas@gmx.de>
 
        * demos/gtk-demo/appwindow.c (do_appwindow): Demonstrate tooltips
index ec7e5d089c1c47226ca723136ac81e60bc73e6cf..e6acdd0240dd93b496fd4824f2c25ecc281c9aa0 100644 (file)
@@ -1,3 +1,22 @@
+2003-09-25  Tor Lillqvist  <tml@iki.fi>
+
+       * demos/gtk-demo/main.c: Don't use hardcoded DEMOCODEDIR on Windows.
+
+2003-09-21  Tor Lillqvist  <tml@iki.fi>
+
+       * gdk/win32/gdkevents-win32.c (handle_wm_paint): New
+       function. Code split out from gdk_event_translate(). Needed
+       because gdk_event_get_graphics_expose() couldn't do anything
+       sensible otherwise. (Not that I think graphics exposes work anyway
+       in gdk/win32, but at least now the code could work.)
+
+       (gdk_event_get_graphics_expose): Call handle_wm_paint() instead of
+       gdk_event_translate(), which couldn't have worked as it doesn't
+       take any pre-allocated GdkEvent parameter any longer.
+       
+       (gdk_event_translate): Handle WM_MOUSEACTIVATE: Don't let
+       GDK_WINDOW_TEMP windows be activated. (#122578, John Ehresman)
+
 2003-09-24  Matthias Clasen  <maclas@gmx.de>
 
        * demos/gtk-demo/appwindow.c (do_appwindow): Demonstrate tooltips
index ec7e5d089c1c47226ca723136ac81e60bc73e6cf..e6acdd0240dd93b496fd4824f2c25ecc281c9aa0 100644 (file)
@@ -1,3 +1,22 @@
+2003-09-25  Tor Lillqvist  <tml@iki.fi>
+
+       * demos/gtk-demo/main.c: Don't use hardcoded DEMOCODEDIR on Windows.
+
+2003-09-21  Tor Lillqvist  <tml@iki.fi>
+
+       * gdk/win32/gdkevents-win32.c (handle_wm_paint): New
+       function. Code split out from gdk_event_translate(). Needed
+       because gdk_event_get_graphics_expose() couldn't do anything
+       sensible otherwise. (Not that I think graphics exposes work anyway
+       in gdk/win32, but at least now the code could work.)
+
+       (gdk_event_get_graphics_expose): Call handle_wm_paint() instead of
+       gdk_event_translate(), which couldn't have worked as it doesn't
+       take any pre-allocated GdkEvent parameter any longer.
+       
+       (gdk_event_translate): Handle WM_MOUSEACTIVATE: Don't let
+       GDK_WINDOW_TEMP windows be activated. (#122578, John Ehresman)
+
 2003-09-24  Matthias Clasen  <maclas@gmx.de>
 
        * demos/gtk-demo/appwindow.c (do_appwindow): Demonstrate tooltips
index d0acf273362594ae55d8c5e6dbdcaab1832eee08..422abdb08dbaf67c4b2183657ac75df3a9293fd8 100644 (file)
@@ -28,6 +28,31 @@ struct _CallbackData
   GtkTreePath *path;
 };
 
+#ifdef G_OS_WIN32
+
+#undef DEMOCODEDIR
+
+static char *
+get_democodedir (void)
+{
+  static char *result = NULL;
+
+  if (result == NULL)
+    {
+      result = g_win32_get_package_installation_directory (NULL, NULL);
+      if (result == NULL)
+       result = "unknown-location";
+
+      result = g_strconcat (result, "\\share\\gtk-2.0\\demo", NULL);
+    }
+
+  return result;
+}
+
+#define DEMOCODEDIR get_democodedir ()
+
+#endif
+
 /**
  * demo_find_file:
  * @base: base filename
index 75ed67212c0928b4c43fa685c16ef666e5e2d5e7..df6673d6277895e3f0815feb9ad0338cd92663c3 100644 (file)
@@ -86,6 +86,10 @@ static gboolean  gdk_event_translate (GdkDisplay *display,
                                         MSG        *msg,
                                         gint       *ret_valp,
                                         gboolean    return_exposes);
+static void      handle_wm_paint        (MSG        *msg,
+                                        GdkWindow  *window,
+                                        gboolean    return_exposes,
+                                        GdkEvent  **event);
 
 static gboolean gdk_event_prepare  (GSource     *source,
                                    gint        *timeout);
@@ -437,7 +441,7 @@ GdkEvent*
 gdk_event_get_graphics_expose (GdkWindow *window)
 {
   MSG msg;
-  GdkEvent *event;
+  GdkEvent *event = NULL;
 
   g_return_val_if_fail (window != NULL, NULL);
   
@@ -445,16 +449,12 @@ gdk_event_get_graphics_expose (GdkWindow *window)
 
   if (PeekMessage (&msg, GDK_WINDOW_HWND (window), WM_PAINT, WM_PAINT, PM_REMOVE))
     {
-      event = gdk_event_new (GDK_NOTHING);
-      
-      if (gdk_event_translate (gdk_drawable_get_display (window), 
-                               &msg, NULL, TRUE))
+      handle_wm_paint (&msg, window, TRUE, &event);
+      if (event != NULL)
        {
          GDK_NOTE (EVENTS, g_print ("gdk_event_get_graphics_expose: got it!\n"));
          return event;
        }
-      else
-       gdk_event_free (event);
     }
   
   GDK_NOTE (EVENTS, g_print ("gdk_event_get_graphics_expose: nope\n"));
@@ -1883,6 +1883,108 @@ adjust_drag (LONG *drag,
     *drag = curr - ((curr - *drag + inc/2) / inc) * inc;
 }
 
+static void
+handle_wm_paint (MSG        *msg,
+                GdkWindow  *window,
+                gboolean    return_exposes,
+                GdkEvent  **event)
+{
+  HRGN hrgn = CreateRectRgn (0, 0, 0, 0);
+  HDC hdc;
+  PAINTSTRUCT paintstruct;
+  GdkRegion *update_region;
+  gint xoffset, yoffset;
+
+  if (GetUpdateRgn (msg->hwnd, hrgn, FALSE) == ERROR)
+    {
+      WIN32_GDI_FAILED ("GetUpdateRgn");
+      return;
+    }
+
+  hdc = BeginPaint (msg->hwnd, &paintstruct);
+
+  GDK_NOTE (EVENTS, g_print ("WM_PAINT: %p  %s %s dc %p%s\n",
+                            msg->hwnd,
+                            _gdk_win32_rect_to_string (&paintstruct.rcPaint),
+                            (paintstruct.fErase ? "erase" : ""),
+                            hdc,
+                            (return_exposes ? " return_exposes" : "")));
+
+  EndPaint (msg->hwnd, &paintstruct);
+
+  /* HB: don't generate GDK_EXPOSE events for InputOnly
+   * windows -> backing store now works!
+   */
+  if (((GdkWindowObject *) window)->input_only)
+    {
+      DeleteObject (hrgn);
+      return;
+    }
+
+  if (!(((GdkWindowObject *) window)->event_mask & GDK_EXPOSURE_MASK))
+    {
+      GDK_NOTE (EVENTS, g_print ("...ignored\n"));
+      DeleteObject (hrgn);
+      return;
+    }
+
+#if 0 /* we need to process exposes even with GDK_NO_BG
+   * Otherwise The GIMP canvas update is broken ....
+   */
+  if (((GdkWindowObject *) window)->bg_pixmap == GDK_NO_BG)
+    break;
+#endif
+
+  if ((paintstruct.rcPaint.right == paintstruct.rcPaint.left) ||
+      (paintstruct.rcPaint.bottom == paintstruct.rcPaint.top))
+    {
+      GDK_NOTE (EVENTS, g_print ("...empty paintstruct, ignored\n"));
+      DeleteObject (hrgn);
+      return;
+    }
+
+  if (return_exposes)
+    {
+      if (!GDK_WINDOW_DESTROYED (window))
+       {
+         GList *list = gdk_drawable_get_display (window)->queued_events;
+
+         *event = gdk_event_new (GDK_EXPOSE);
+         (*event)->expose.window = window;
+         (*event)->expose.area.x = paintstruct.rcPaint.left;
+         (*event)->expose.area.y = paintstruct.rcPaint.top;
+         (*event)->expose.area.width = paintstruct.rcPaint.right - paintstruct.rcPaint.left;
+         (*event)->expose.area.height = paintstruct.rcPaint.bottom - paintstruct.rcPaint.top;
+         (*event)->expose.region = _gdk_win32_hrgn_to_region (hrgn);
+         (*event)->expose.count = 0;
+
+         while (list != NULL)
+           {
+             GdkEventPrivate *evp = list->data;
+
+             if (evp->event.any.type == GDK_EXPOSE &&
+                 evp->event.any.window == window &&
+                 !(evp->flags & GDK_EVENT_PENDING))
+               evp->event.expose.count++;
+
+             list = list->next;
+           }
+       }
+
+      return;
+    }
+
+  update_region = _gdk_win32_hrgn_to_region (hrgn);
+
+  _gdk_windowing_window_get_offsets (window, &xoffset, &yoffset);
+  gdk_region_offset (update_region, xoffset, yoffset);
+  
+  _gdk_window_process_expose (window, update_region);
+  gdk_region_destroy (update_region);
+
+  DeleteObject (hrgn);
+}
+
 static gboolean
 gdk_event_translate (GdkDisplay *display,
                     MSG      *msg,
@@ -1891,14 +1993,11 @@ gdk_event_translate (GdkDisplay *display,
 {
   DWORD pidActWin;
   DWORD pidThis;
-  PAINTSTRUCT paintstruct;
-  HDC hdc;
   RECT rect, *drag, orig_drag;
   POINT point;
   MINMAXINFO *mmi;
   HWND hwnd;
   HCURSOR hcursor;
-  HRGN hrgn;
   CHARSETINFO charset_info;
   BYTE key_state[256];
   HIMC himc;
@@ -2285,10 +2384,6 @@ gdk_event_translate (GdkDisplay *display,
 
       API_CALL (GetKeyboardState, (key_state));
 
-      /* Note that for this message we always return FALSE from
-       * gdk_event_translate(), so any events we want have to be
-       * created and appended to the queue here.
-       */
       for (i = 0; i < ccount; i++)
        {
          if (((GdkWindowObject *) window)->event_mask & GDK_KEY_PRESS_MASK)
@@ -2394,7 +2489,6 @@ gdk_event_translate (GdkDisplay *display,
       _gdk_event_button_generate (display, event);
 
       return_val = TRUE;
-
       break;
 
     case WM_LBUTTONUP:
@@ -2588,6 +2682,7 @@ gdk_event_translate (GdkDisplay *display,
       }
       return_val = TRUE;
       break;
+
     case WM_MOUSEWHEEL:
       GDK_NOTE (EVENTS, g_print ("WM_MOUSEWHEEL: %p %d\n",
                                 msg->hwnd, HIWORD (msg->wParam)));
@@ -2680,6 +2775,15 @@ gdk_event_translate (GdkDisplay *display,
       update_colors (window, TRUE);
       break;
 
+     case WM_MOUSEACTIVATE:
+       GDK_NOTE (EVENTS, g_print ("WM_MOUSEACTIVATE: %p\n", msg->hwnd));
+       if (gdk_window_get_window_type (window) == GDK_WINDOW_TEMP) 
+        {
+          *ret_valp = MA_NOACTIVATE;
+          return_val = TRUE;
+        }
+       break;
+
     case WM_SETFOCUS:
     case WM_KILLFOCUS:
       GDK_NOTE (EVENTS, g_print ("WM_%sFOCUS: %p\n",
@@ -2715,97 +2819,7 @@ gdk_event_translate (GdkDisplay *display,
       break;
 
     case WM_PAINT:
-      hrgn = CreateRectRgn (0, 0, 0, 0);
-      if (GetUpdateRgn (msg->hwnd, hrgn, FALSE) == ERROR)
-       {
-         WIN32_GDI_FAILED ("GetUpdateRgn");
-         break;
-       }
-
-      hdc = BeginPaint (msg->hwnd, &paintstruct);
-
-      GDK_NOTE (EVENTS, g_print ("WM_PAINT: %p  %s %s dc %p%s\n",
-                                msg->hwnd,
-                                _gdk_win32_rect_to_string (&paintstruct.rcPaint),
-                                (paintstruct.fErase ? "erase" : ""),
-                                hdc,
-                                (return_exposes ? " return_exposes" : "")));
-
-      EndPaint (msg->hwnd, &paintstruct);
-
-      /* HB: don't generate GDK_EXPOSE events for InputOnly
-       * windows -> backing store now works!
-       */
-      if (((GdkWindowObject *) window)->input_only)
-       {
-         DeleteObject (hrgn);
-         break;
-       }
-
-      if (!(((GdkWindowObject *) window)->event_mask & GDK_EXPOSURE_MASK))
-       {
-         GDK_NOTE (EVENTS, g_print ("...ignored\n"));
-         DeleteObject (hrgn);
-         break;
-       }
-
-#if 0 /* we need to process exposes even with GDK_NO_BG
-       * Otherwise The GIMP canvas update is broken ....
-       */
-      if (((GdkWindowObject *) window)->bg_pixmap == GDK_NO_BG)
-       break;
-#endif
-
-      if ((paintstruct.rcPaint.right == paintstruct.rcPaint.left) ||
-         (paintstruct.rcPaint.bottom == paintstruct.rcPaint.top))
-       {
-         GDK_NOTE (EVENTS, g_print ("...empty paintstruct, ignored\n"));
-         DeleteObject (hrgn);
-         break;
-       }
-
-      if (return_exposes)
-        {
-         if (!GDK_WINDOW_DESTROYED (window))
-           {
-              GList *list = display->queued_events;
-
-             event = gdk_event_new (GDK_EXPOSE);
-             event->expose.window = window;
-             event->expose.area.x = paintstruct.rcPaint.left;
-             event->expose.area.y = paintstruct.rcPaint.top;
-             event->expose.area.width = paintstruct.rcPaint.right - paintstruct.rcPaint.left;
-             event->expose.area.height = paintstruct.rcPaint.bottom - paintstruct.rcPaint.top;
-             event->expose.region = _gdk_win32_hrgn_to_region (hrgn);
-             event->expose.count = 0;
-             
-              while (list != NULL)
-                {
-                 GdkEventPrivate *event = list->data;
-                 
-                  if (event->event.any.type == GDK_EXPOSE &&
-                     event->event.any.window == window &&
-                     !(event->flags & GDK_EVENT_PENDING))
-                   event->event.expose.count++;
-
-                 list = list->next;
-                }
-             append_event (display, event);
-            }
-
-         return_val = TRUE;
-        }
-      else
-        {
-          GdkRegion *update_region = _gdk_win32_hrgn_to_region (hrgn);
-
-         _gdk_windowing_window_get_offsets (window, &xoffset, &yoffset);
-         gdk_region_offset (update_region, xoffset, yoffset);
-
-         _gdk_window_process_expose (window, update_region);
-         gdk_region_destroy (update_region);
-        }
-      DeleteObject (hrgn);
+      handle_wm_paint (msg, window, FALSE, NULL);
       break;
 
     case WM_SETCURSOR: